//
// Copyright (c) Beijing Institute of computer technology and Application. All rights reserved.
// Author： Kou Jinqiao
// Date：2021-06-03
//

module IdentifyModule
{
    exception GenericError
    {
        string reason;
    }

    sequence<byte> Row;      //图像数组
	sequence<Row> Matrix;   //图像矩阵,用于灰度图像
	sequence<Matrix> Tensor;//图像张量,用于彩色图像
	 
    sequence<string> StrSeq; //字符数组

    struct Rect
    {
        int left;   // 左顶坐标
        int top;    // 
        int right;  // 右底坐标
        int bottom; //
    };

    struct Bbox
    {
        string name; //物体名字
        Rect rect;   //物体坐标
        float  confidence;//物体置信度
    };

    sequence<Bbox> BboxSeq;//物体识别信息

	struct Dim
	{
		int height;//图像高度
		int width; //图像宽度
		int channel;//图像通道数，彩色为3，黑白为1
	};

    struct AlgorithmInfo
    {
    	string name; //算法的名称
    	StrSeq kinds;//种类,包括物体种类
    	string version;

    	Dim dim;  //算法要求图像的输入尺寸
    }; 

    struct PlatformInfo
    {
    	string name; //平台的名称，比如CPU、NPU
    };

    struct ServerInfo
    {
        string serverId; //获取算法服务ID
        string nodeId;//获取算法服务节点信息
        string recentTimestamp;//获取算法最近被调用的信息
    };   

    interface ObjIdentify
    {
        idempotent BboxSeq GetObjBbox(Row Img) throws GenericError;
        idempotent AlgorithmInfo GetAlgorithmInfo();//获取算法相关信息，包括算法名称
        idempotent PlatformInfo GetPlatformInfo();//获取算法运行框架信息
        idempotent ServerInfo GetServerInfo();// 
        idempotent void SetDevice(int DeviceID);
        idempotent void SetModelPath(string modelpath);
       
    }
}
